#include "MouseDialog.h"
#include "ui_MouseDialog.h"

MouseDialog::MouseDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::MouseDialog)
{
    ui->setupUi(this);
    m_dDrag = false;
}

MouseDialog::~MouseDialog()
{
    delete ui;
}

//当鼠标按下时被执行
void MouseDialog::mousePressEvent (QMouseEvent *event)
{
    //判断是否为鼠标左键被按下
    if (event->button() == Qt::LeftButton) {
        m_dDrag = true;
        //获取label所在的区域
        QRect rclabel = ui->label->frameRect();
        //平移让label和鼠标使用相同的坐标系
        rclabel.translate(ui->label->pos());
        if (rclabel.contains(event->pos()) == true) {
            //记录鼠标点击点和label左上角的相对位置
            m_ptPos = ui->label->pos() - event->pos();
        }
    }
}

//当鼠标抬起时被执行
void MouseDialog::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        m_dDrag = false;
    }
}
//鼠标移动时被执行
void MouseDialog::mouseMoveEvent (QMouseEvent *event)
{
    if(m_dDrag == true) {
        //鼠标的位置 + 偏移位置
        QPoint newpos = event->pos() + m_ptPos;

        //设置label的移动范围
        //x:--（窗口宽-label宽）
        //y:-- (窗口高-label高)

        //获取窗口和label的size
        QSize sz = size();
        QSize szlabel = ui->label->size();
        if (newpos.x() < 0) {
            newpos.setX(0);
        } else if (newpos.x() > (sz.width() - szlabel.width())) {
            newpos.setX(sz.width() - szlabel.width());
        }
        if (newpos.y() < 0) {
            newpos.setY(0);
        } else if (newpos.y() > (sz.height() - szlabel.height())) {
            newpos.setY(sz.height() - szlabel.height());
        }

        ui->label->move(newpos);
    }
}

